package dibujo;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Polygon;

import org.uc3m.ed.interfaz_grafica.ventana.VentanaPrincipal;

public class CabezaCola {
	
	/**
	 * 
	 */
	private Graphics _grafico;
	
	/**
	 * 
	 */
	private int _altoNodo;
	
	/**
	 * 
	 */
	private NodoDibujo _cabeza;
	
	/**
	 * 
	 */
	private NodoDibujo _cola;
	

	/**
	 * @param grafico
	 */
	public CabezaCola(Graphics grafico) {
		_grafico=grafico;
		_altoNodo=40;
	}
	
	/**
	 * 
	 */
	public void crearCabezaCola()
	{
		try{
			crearCabeza();
			crearCola();
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CabezaCola ERROR::1\n   Se ha produciodo una Excepcion: "+e.toString());
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CabezaCola ERROR::2\n   Se ha produciodo un Error: "+e.toString());
		}
	}

	/**
	 * 
	 */
	private void crearCola()throws Exception,Error  {
		_grafico.setColor(new Color (142,45,67));
		_grafico.drawLine(getXApuntamientoCola(),getYApuntamientoCola(),getXApuntamientoCola(),getYApuntamientoCola()-_altoNodo);
		_grafico.fillPolygon(RellenarFlechaArriba(new Point(getXApuntamientoCola(),getYApuntamientoCola()-_altoNodo)));
		_grafico.drawString("Cola", getXApuntamientoCola()-10, getYApuntamientoCola()+15);
	}

	private int getXApuntamientoCola()throws Exception,Error  {
		return _cola.getPosicionX()+(_cola.getAnchoNodo()/2);
	}
	private int getYApuntamientoCola() {
		
		return _cola.getPosicionY()+_cola.getAltoNodo()+_altoNodo+20;
	}

	/**
	 * 
	 */
	private void crearCabeza() throws Exception,Error {
		_grafico.setColor(new Color (26,82,39));
		_grafico.drawLine(getXApuntamientoCabeza(),getYApuntamientoCabeza(),getXApuntamientoCabeza(),getYApuntamientoCabeza()+_altoNodo);
		_grafico.fillPolygon(RellenarFlechaAbajo(new Point(getXApuntamientoCabeza(),getYApuntamientoCabeza()+_altoNodo)));
		_grafico.drawString("Cabeza", getXApuntamientoCabeza()-15, getYApuntamientoCabeza()-5);
		
	}
	
	private int getXApuntamientoCabeza()throws Exception,Error  {
		return  _cabeza.getPosicionX()+(_cabeza.getAnchoNodo()/2);
	}

	private int getYApuntamientoCabeza() {
	
		return _cabeza.getPosicionY()-_altoNodo-40;
	}

	/**
	 * @param centro
	 * @return
	 */
	private Polygon RellenarFlechaAbajo(Point centro)throws Exception,Error  {
		Polygon flecha= new Polygon();
		int lados=3;
		double alfa= ((2*Math.PI)/lados);
		int radio=10;
		
		for(int i=0;i<lados;i++)
			flecha.addPoint((int)(centro.x+(radio*Math.sin(i*alfa))),(int)(centro.y+(radio*Math.cos(i*alfa))));
		
		return flecha;
	}
	
	/**
	 * @param centro
	 * @return
	 */
	private Polygon RellenarFlechaArriba(Point centro)throws Exception,Error  {
		Polygon flecha= new Polygon();
		int lados=3;
		double alfa= ((2*Math.PI)/lados);
		int radio=10;
		
		for(int i=0;i<lados;i++)
			flecha.addPoint((int)(centro.x-(radio*Math.sin(i*alfa))),(int)(centro.y-(radio*Math.cos(i*alfa))));
		
		return flecha;
	}
	
	/**
	 * @param posicionY
	 */
	public void setCabeza(NodoDibujo cabeza) {
		_cabeza = cabeza;
	}
	/**
	 * @param posicionY
	 */
	public void setCola(NodoDibujo cola) {
		_cola = cola;
	}
}
